package com.liu.concurrent.thread;

/**
 * 子线程循环3次,接着主线程循环5次,接着再子线程循环3次,主线程循环5次,如此反复,循环3次 方式一：使用synchronized
 *
 */
public class MyThread1 {
	private boolean flag = false;

	// 主线程要实现的功能
	public synchronized void mainFunction() {
		while (!flag) {
			try {
				this.wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		for (int i = 0; i < 5; i++) {
			System.out.println("mainFunction,主线程循环" + i + "次");
		}
		this.notify();
		flag = false;
	}

	// 子线程要实现的功能
	public synchronized void subFunction() {
		while (flag) {
			try {
				this.wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		for (int i = 0; i < 3; i++) {
			System.out.println("subFunction,子线程循环" + i + "次");
		}
		this.notify();
		flag = true;
	}

	public static void main(String[] args) {
		final MyThread1 t = new MyThread1();
		// 子线程循环三次
//		new ByExtendsThread(new Runnable() {
//			@Override
//			public void run() {
//				for (int i = 0; i < 3; i++) {
//					t.subFunction();
//				}
//			}
//		}).start();
		// 主线程循环五次
		for (int i = 0; i < 5; i++) {
			t.mainFunction();
		}
		System.err.println("-----------------------------------");
	}
}
